package com.kuangstudy.controller.string.lua;

import com.kuangstudy.utils.IPUtils;
import com.kuangstudy.vo.R;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.List;

/**
 * @author 飞哥
 * @Title: 学相伴出品
 * @Description: 我们有一个学习网站：https://www.kuangstudy.com
 * @date 2021/5/21 10:03
 */
@RestController
@Log4j2
public class CourseLuaController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    @Qualifier("limitipluascript")
    private DefaultRedisScript<Long> defaultRedisScript;

    @GetMapping("/course/lua/list")
    public R courselist(HttpServletRequest request) {
        // 1: 获取请求的IPD
        String keyip = IPUtils.getIpAddr(request);
        // 2 :设置redis的key
        List<String> keyList = Arrays.asList("course:api:" + keyip);
        // 2 : 设置redis并且调用lua的脚本执行，代表30秒内，最多允许访问10次。
        Long execute = this.stringRedisTemplate.execute(defaultRedisScript, keyList, "30", "10");
        if (execute == 0) {
            log.info("1----->ip:{},请求收到限制", keyip);
            return R.error().message("不要执行太快，请稍后试试看...");
        }
        log.info("2----->ip:{},正常访问，返回课程列表", keyip);
        return R.ok().data("result",execute);
    }


}
